View Javadoc
1 /* Copyright © 1999 George Reese, All Rights Reserved */
2 package net.plugin.sql.gui.model.table;
3
4 import net.plugin.sql.beans.DataSource;
5 import net.plugin.sql.util.JDBCConnectionManager;
6 import net.plugin.sql.util.DataSourceException;
7
8 import javax.swing.table.AbstractTableModel;
9 import javax.swing.*;
10 import java.sql.*;
11 import javax.sql.RowSet;
12 import javax.sql.RowSetEvent;
13 import javax.sql.RowSetListener;
14
15 import sun.jdbc.rowset.CachedRowSet;
16
17 public class CachedRowSetTableModel extends AbstractTableModel implements RowSetListener {
18 private RowSet rowSet = null;
19
20 public CachedRowSetTableModel(RowSet set) {
21 super();
22 rowSet = set;
23 rowSet.addRowSetListener(this);
24 }
25
26 public void cursorMoved(RowSetEvent event) {
27 }
28
29 public Class getColumnClass(int column) {
30 String cname;
31 int type;
32
33 try {
34 ResultSetMetaData meta = rowSet.getMetaData();
35
36 if (meta == null) {
37 return null;
38 }
39 type = meta.getColumnType(column + 1);
40 } catch (SQLException e) {
41 e.printStackTrace();
42 return super.getColumnClass(column);
43 }
44 switch (type) {
45 case Types.BIT:
46 {
47 cname = "java.lang.Boolean";
48 break;
49 }
50 case Types.TINYINT:
51 {
52 cname = "java.lang.Byte";
53 break;
54 }
55 case Types.SMALLINT:
56 {
57 cname = "java.lang.Short";
58 break;
59 }
60 case Types.INTEGER:
61 {
62 cname = "java.lang.Integer";
63 break;
64 }
65 case Types.BIGINT:
66 {
67 cname = "java.lang.Long";
68 break;
69 }
70 case Types.FLOAT:
71 case Types.REAL:
72 {
73 cname = "java.lang.Float";
74 break;
75 }
76 case Types.DOUBLE:
77 {
78 cname = "java.lang.Double";
79 break;
80 }
81 case Types.NUMERIC:
82 {
83 cname = "java.lang.Number";
84 break;
85 }
86 case Types.DECIMAL:
87 {
88 cname = "java.math.BigDecimal";
89 break;
90 }
91 case Types.CHAR:
92 case Types.VARCHAR:
93 case Types.LONGVARCHAR:
94 {
95 cname = "java.lang.String";
96 break;
97 }
98 case Types.DATE:
99 {
100 cname = "java.sql.Date";
101 break;
102 }
103 case Types.TIME:
104 {
105 cname = "java.sql.Time";
106 break;
107 }
108 case Types.TIMESTAMP:
109 {
110 cname = "java.sql.Timestamp";
111 break;
112 }
113 case Types.BINARY:
114 case Types.VARBINARY:
115 case Types.LONGVARBINARY:
116 {
117 cname = "byte[]";
118 break;
119 }
120 case Types.OTHER:
121 case Types.JAVA_OBJECT:
122 {
123 cname = "java.lang.Object";
124 break;
125 }
126 case Types.CLOB:
127 {
128 cname = "java.sql.Clob";
129 break;
130 }
131 case Types.BLOB:
132 {
133 cname = "java.ssql.Blob";
134 break;
135 }
136 case Types.REF:
137 {
138 cname = "java.sql.Ref";
139 break;
140 }
141 case Types.STRUCT:
142 {
143 cname = "java.sql.Struct";
144 break;
145 }
146 default:
147 {
148 return super.getColumnClass(column);
149 }
150 }
151 try {
152 return Class.forName(cname);
153 } catch (Exception e) {
154 e.printStackTrace();
155 return super.getColumnClass(column);
156 }
157 }
158
159 public int getColumnCount() {
160 try {
161 ResultSetMetaData meta = rowSet.getMetaData();
162
163 if (meta == null) {
164 return 0;
165 }
166 return meta.getColumnCount();
167 } catch (SQLException e) {
168 return 0;
169 }
170 }
171
172 public String getColumnName(int col) {
173 try {
174 ResultSetMetaData meta = rowSet.getMetaData();
175
176 if (meta == null) {
177 return null;
178 }
179 return meta.getColumnName(col + 1);
180 } catch (SQLException e) {
181 return "Error";
182 }
183 }
184
185 public int getRowCount() {
186 try {
187 if (rowSet.last()) {
188 return (rowSet.getRow());
189 } else {
190 return 0;
191 }
192 } catch (SQLException e) {
193 return 0;
194 }
195 }
196
197 public Object getValueAt(int row, int col) {
198 try {
199 if (!rowSet.absolute(row + 1)) {
200 return null;
201 }
202 return rowSet.getObject(col + 1);
203 } catch (SQLException e) {
204 return null;
205 }
206 }
207
208 public void rowChanged(RowSetEvent event) {
209 try {
210 int row = rowSet.getRow();
211
212 if (rowSet.rowDeleted()) {
213 fireTableRowsDeleted(row, row);
214 } else if (rowSet.rowInserted()) {
215 fireTableRowsInserted(row, row);
216 } else if (rowSet.rowUpdated()) {
217 fireTableRowsUpdated(row, row);
218 }
219 } catch (SQLException e) {
220 }
221 }
222
223 public void rowSetChanged(RowSetEvent event) {
224 fireTableStructureChanged();
225 }
226
227 public void setValueAt(Object value, int row, int column) {
228 try {
229 if (!rowSet.absolute(row + 1)) {
230 return;
231 }
232 rowSet.updateObject(column + 1, value);
233 } catch (SQLException e) {
234 }
235 }
236
237 public static void main(String[] args) {
238 DataSource ds = new DataSource();
239 ds.setName("Test");
240 ds.setDriver("oracle.jdbc.driver.OracleDriver");
241 ds.setUrl("jdbc:oracle:thin:@hades.genscape.com:1581:test");
242 ds.setUser("genscape");
243 ds.setPassword("gentest");
244 JDBCConnectionManager manager = new JDBCConnectionManager(ds);
245 Connection con = null;
246 Statement stmt = null;
247 ResultSet rs = null;
248 CachedRowSet crs = null;
249 try {
250 con = manager.getConnection();
251 stmt = con.createStatement();
252 rs = stmt.executeQuery("select * from plant");
253 stmt.setMaxRows(25);
254 crs = new CachedRowSet();
255 crs.populate(rs);
256 } catch (DataSourceException e) {
257 e.printStackTrace();
258 } catch (SQLException e) {
259 e.printStackTrace();
260 } finally {
261 try {
262 rs.close();
263 stmt.close();
264 con.close();
265 } catch (SQLException e) {
266 e.printStackTrace();
267 }
268 }
269 JFrame frame = new JFrame("Test");
270 CachedRowSetTableModel model = new CachedRowSetTableModel(crs);
271 JTable table = new JTable(model);
272 JScrollPane jScrollPane = new JScrollPane(table);
273 frame.getContentPane().add(jScrollPane);
274 frame.pack();
275 frame.show();
276 }
277
278 }
This page was automatically generated by Maven